package luke.core.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;


import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;

/**
 * JSON工具类，用于对象的序列化和反序列化
 */
public class JsonUtils {
    private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
    
    /**
     * 将对象序列化为JSON并写入文件
     * 
     * @param object 要序列化的对象
     * @param filePath 输出文件路径
     * @param <T> 对象类型
     * @throws IOException IO异常
     */
    public static <T> void writeToJson(T object, String filePath) throws IOException {
        try (FileWriter writer = new FileWriter(filePath)) {
            gson.toJson(object, writer);
        }
    }
    
    /**
     * 从JSON文件读取并反序列化为对象
     * 
     * @param filePath 输入文件路径
     * @param classType 对象类型
     * @param <T> 对象类型
     * @return 反序列化后的对象
     * @throws IOException IO异常
     */
    public static <T> T readFromJson(String filePath, Class<T> classType) throws IOException {
        try (FileReader reader = new FileReader(filePath)) {
            return gson.fromJson(reader, classType);
        }
    }
    
    /**
     * 从JSON文件读取并反序列化为对象列表
     * 
     * @param filePath 输入文件路径
     * @param listType 对象列表类型
     * @param <T> 对象类型
     * @return 反序列化后的对象列表
     * @throws IOException IO异常
     */
    public static <T> List<T> readListFromJson(String filePath, Type listType) throws IOException {
        try (FileReader reader = new FileReader(filePath)) {
            return gson.fromJson(reader, listType);
        }
    }
    
    /**
     * 从JSON文件读取并反序列化为对象（使用Type参数）
     * 
     * @param filePath 输入文件路径
     * @param type 对象类型
     * @param <T> 对象类型
     * @return 反序列化后的对象
     * @throws IOException IO异常
     */
    public static <T> T readFromJson(String filePath, Type type) throws IOException {
        try (FileReader reader = new FileReader(filePath)) {
            return gson.fromJson(reader, type);
        }
    }
}